import Vue from 'vue'
import Vuex from 'vuex'

import { loginAPI } from '../api/login'
Vue.use(Vuex)

export default new Vuex.Store({
  // 开启严格模式，一切数据修改只能通过mutations进行
  strict: true,
  // 定义共享数据源 保存登录名和密码
  state: {
    // 开始没有值，默认空字符串
    token: window.localStorage.getItem('token') || '',
    refreshToken: window.localStorage.getItem('refresh_token') || ''
  },
  mutations: {
    // 定义修改登录名和密码的函数
    //  给两个值，第一个值为定义的共享数据源，
    // 第二个为将要赋给的token值
    setToken (state, tokemStr) {
      // 找到state下面的token的值给tokemStr
      state.token = tokemStr
      // 本地在存一个，避免刷新时消失
      window.localStorage.setItem('tokrn', tokemStr)
    },
    setRefreshToken (state, refreshTokenStr) {
      state.refreshToken = refreshTokenStr
      window.localStorage.setItem('refresh_token', refreshTokenStr)
    }
  },
  actions: {
    // 异步修改
    async asyncLoginAction (store, formLogin) {
      // 发送登录请求
      const resp = await loginAPI(formLogin)
      // 命名不规范，给他重新赋值
      const { token, refresh_token: refreshToken } = resp.data

      store.commit('setToken', token)
      store.commit('setRefreshToken', refreshToken)
    }
  },
  modules: {
  }
})
